import { observe } from "./observe/index"

export function initState(vm) {
  let ops = vm.$options

  if (ops.data) {
    initData(vm)
  }

  if (ops.props) {
    initProps()
  }

  if (ops.methdos) {
    initMethods()
  }
  if (ops.watch) {
    initWatch()
  }
  if (ops.computed) {
    initComputed()
  }
}



// 初始化数据
function initData(vm) {
  let data = vm.$options.data
  data = vm._data =  typeof data === 'function' ? data() : data;

  //把data 所有属性 都代理到vm上
  for(let key in data) {  
    Proxy(vm,'_data',key)
  }

  // 监听data中的属性
  observe(data)
}




function initProps() {}
function initMethods() { }
function initWatch() { }
function initComputed() { } 



function  Proxy (vm,souce,key){

  Object.defineProperty(vm,key,{
    get(){
      return vm[souce][key]
    },
    set(newVal){
      vm[souce][key] = newVal
    }
  })
}

